import pandas as pd,xlwings as xw

version=1.1
def 计算汇总列(dff):
    '''直营城市的计算字段'''
    汇总=pd.DataFrame()
    # 添加 抽成小计、补贴小计等数据
    # 左边
    汇总['支付合计']=dff.loc[:,'余额支付':'抖音团购'].sum(1)  #sum(1) 表示每一行求和
    汇总['权益核销小计']=dff.loc[:,'权益核销']
    汇总['补贴小计(差额调整前)']=dff.loc[:,'下单优惠':'调度费'].sum(1)- dff.loc[:,'系统加价']  #系统加价算进去了，系统加价按现在的做法是冲减收入了。
    汇总['差额调整']=''
    汇总['补贴合计']=''  #=补贴小计+差额调整
    # 右边
    汇总['用户投保(扣除跑男)']=dff.loc[:,'用户投保']-dff.loc[:,'保费结算给跑男'] #扣除保费结算给跑男
    汇总['首单扣除']=dff.loc[:,'首单扣除']
    汇总['首单扣除(帮帮)']=''
    汇总['首单扣除(公司)']=''
    
    汇总['跑男收入合计']=dff.loc[:,['用户打赏费','代买商品','跑男收入','跨城费','跑男调度费收入','待结算超人跑男收入']].sum(1)- \
    dff.loc[:,'抽成退回']-dff.loc[:,'首单扣除'] #抽成退回在表中以负数表示退给跑男的抽成。 \是换行

    汇总['抽成小计']=dff.loc[:,['系统抽成','准时保保费','抽成退回','待结算超人跑男公司抽成']].sum(1)-dff.loc[:,'跑男运力补贴']-dff.loc[:,'系统加价']  #跑男运力补贴正数表示负抽成！即一种补贴，做账时是冲减收入。
    # 汇总['验证']=汇总.loc[:,['支付合计','权益核销','补贴合计']].sum(1) - 汇总.loc[:,['保费结算太平洋','保费结算天安','保费结算UU跑腿','跑男收入小计','抽成小计','首单扣除']].sum(1)
    汇总['抽成合计']=''
    
    汇总['差额调整']=汇总.loc[:,['用户投保(扣除跑男)','跑男收入合计','抽成小计','首单扣除']].sum(1) - \
    汇总.loc[:,['支付合计','权益核销小计','补贴小计(差额调整前)']].sum(1)   # 右边减左边，正数表示左边小
    
    汇总['补贴合计']=汇总.loc[:,'补贴小计(差额调整前)']+汇总['差额调整']
    汇总['收入']=''
    汇总['销项税额']=''


    return 汇总

def 计算汇总列2(dff):

    汇总=pd.DataFrame()
    # 添加 抽成小计、补贴小计等数据
    汇总['左边']=dff.loc[:,'余额支付':'调度费'].sum(1)  #sum(1) 表示每一行求和
    汇总['右边']=dff.loc[:,['用户投保','用户打赏费','代买商品','跨城费','系统抽成','准时保保费','跑男收入','跑男调度费收入','超人跑男待结算']].sum(1)-dff.loc[:,'跑男运力补贴']-dff.loc[:,'保费结算给跑男']
    #
    汇总['验证']=汇总.loc[:,'左边'] - 汇总.loc[:,'右边']
    # 汇总_合并=pd.merge(部门,汇总,left_on='城市名称',right_on='城市名称',how='outer',)

    return 汇总

def 代理城市计算字段(dff):
    
    '''代理城市的计算字段'''


    汇总=pd.DataFrame()
    汇总['支付小计']=dff.loc[:,'余额支付':'抖音团购'].sum(1)  #sum(1) 表示每一行求和
    汇总['权益核销小计']=dff.loc[:,'权益核销']
    汇总['支付合计']=汇总['支付小计']+汇总['权益核销小计']
    汇总['跑男收入合计']=dff.loc[:,['用户打赏费','代买商品','跑男收入','跨城费','跑男调度费收入']].sum(1)- \
    dff.loc[:,'抽成退回'] # 代理城市的跑男收入不减抽成退回
    汇总['超人跑男待结算小计']=dff.loc[:,['超人跑男待结算']]
    汇总['代理商利润']=汇总.loc[:,['支付合计']].sum(1)-汇总.loc[:,['跑男收入合计','超人跑男待结算小计']].sum(1)
    

    return 汇总




clm=['凭证类别','凭证编号','来源类型','差异凭证','附单据数','摘要','科目编码','科目',
 '币种','数量','单价','借贷方向','原币','本币','票据号','票据日期','业务单号','业务日期','到期日',
 '业务员编码','业务员','银行帐号','结算方式','往来单位编码','往来单位','部门编码','部门','存货编码',
 '存货','人员编码','人员','项目编码','项目']


# 定义生成凭证模版的函数
def 生成凭证模版(表头,df,本币表头,科目编码,科目,借贷方向,摘要='',辅助核算=[]):
    '''
    clm 是凭证模版的表头，固定传入即可。
    df 是从哪个dataframe里取数做凭证模版
    '''
    凭证模版=pd.DataFrame(columns=表头)
    凭证模版['本币']=df[本币表头]
    凭证模版['凭证类别']='记账凭证'
    凭证模版['凭证编号']='1'
    凭证模版['摘要']=摘要
    凭证模版['科目编码']=科目编码
    凭证模版['科目']=科目
    凭证模版['借贷方向']=借贷方向
    凭证模版['币种']='人民币'
    for a in ['往来单位','部门','项目']:
        if a in 辅助核算:
            凭证模版[a + '编码'] = df['t+编码']
            凭证模版[a] =df['t+名称']

        
    return 凭证模版

# 定义生成凭证模版的函数2
def 生成凭证模版2(表头,本币,科目编码,科目,借贷方向,摘要='',往来单位编码='',往来单位='',部门编码='',部门='',项目编码='',项目=''):
    '''
    这个是做汇总数的,比如销项税额那种
    '''
    凭证模版=pd.DataFrame(columns=表头)
    凭证模版['本币']=[本币] # 和生成凭证模版的差别  ，这个如果不用列表的话，没法赋值
    凭证模版['凭证类别']='记账凭证'
    凭证模版['摘要']=摘要
    凭证模版['科目编码']=科目编码
    凭证模版['科目']=科目
    凭证模版['借贷方向']=借贷方向
    凭证模版['币种']='人民币'
    凭证模版['往来单位编码']=往来单位编码
    凭证模版['往来单位']=往来单位
    凭证模版['部门编码']=部门编码
    凭证模版['部门']=部门
    凭证模版['项目编码']=项目编码
    凭证模版['项目']=项目

        
    return 凭证模版


def 通用凭证模版(表头,凭证类别='记账凭证',凭证编号='1',摘要='',
                科目编码='',科目='',币种='人民币',借贷方向='',本币='',往来单位编码='',
                往来单位='',部门编码='',部门='',项目编码='',项目=''
           ):
    '''
    1.创建一个空的dataframe，有着凭证模版的表头，然后自己向其中写入数据即可，
    最简单用法可以只传入一个表头和一个本币，然后后面的那些数据可以自己补充，这是快速
    根据传入的本币的长度，创建若干个dataframe然后连接起来。

    2.表头故意没有加入制单日期

    3.这个函数用起来最直观！不容易错应该
    
    '''
    凭证模版=pd.DataFrame(columns=表头)
    凭证模版['本币']=本币  #可以直接传入一个df[某某某] 这样的数据
    凭证模版['凭证类别']=凭证类别
    凭证模版['凭证编号']=凭证编号
    凭证模版['摘要']=摘要
    凭证模版['科目编码']=科目编码
    凭证模版['科目']=科目
    凭证模版['币种']=币种
    凭证模版['借贷方向']=借贷方向
    凭证模版['往来单位编码']=往来单位编码
    凭证模版['往来单位']=往来单位
    凭证模版['部门编码']=部门编码
    凭证模版['部门']=部门
    凭证模版['项目编码']=项目编码
    凭证模版['项目']=项目

    return 凭证模版
    
    
    